﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.util;
using System.Windows.Forms;
using Business_Entity;
using Business_Logic;

namespace PetSoft.GUI.Compras
{
    public partial class GUIBuscarPedidoCompra : Form
    {
    	private int opcionModificar;
    	private int opcion;
    	private List<BELineaPedidoCompra> lstAuxiliar=new List<BELineaPedidoCompra>();
    	private List<Business_Entity.BEPedidoCompra> lstPedidoCompra;
    	private BLPedidoCompra blPedidoCompra=new BLPedidoCompra();
    	private List<BELineaOrdenCompra> lstLineaPedCompra;
    	private GUINuevaOrdenDeCompra gui;
    	private String proveedor;
        public GUIBuscarPedidoCompra()
        {
        	try{
	            InitializeComponent();
	            
	            
	            DesdefsDTP.MaxDate=DateTime.Now;
	            DesdefrDTP.MaxDate=DateTime.Now;
	            DesdefeDTP.MaxDate=DateTime.Now;
	            HastafsDTP.MaxDate=DateTime.Now;
	            HastafrDTP.MaxDate=DateTime.Now;
	            HastafeDTP.MaxDate=DateTime.Now;
	            DesdefsDTP.Enabled=false;
	            DesdefrDTP.Enabled=false;
	            DesdefeDTP.Enabled=false;
	            HastafsDTP.Enabled=false;
	            HastafrDTP.Enabled=false;
	            HastafeDTP.Enabled=false;
	            this.MaximizeBox=false;
	            this.MinimizeBox=false;
	            CargarBTN.Visible=false;
	            Ver2BTN.Visible=false;
	            EstadoCB.SelectedText="<Seleccionar>";
	            //EstadoCB.SelectedItem="<Seleccionar>";
	            CargarVentana();
	            this.Text="Mantenimiento Pedido Compra";
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        public GUIBuscarPedidoCompra(int opcion,List<BELineaOrdenCompra> lstped,GUINuevaOrdenDeCompra guiS,String cad){
        	try{
        		InitializeComponent();
	        	
	        	DesdefsDTP.Enabled=false;
	            DesdefrDTP.Enabled=false;
	            DesdefeDTP.Enabled=false;
	            HastafsDTP.Enabled=false;
	            HastafrDTP.Enabled=false;
	            HastafeDTP.Enabled=false;
	        	DesdefsDTP.MaxDate=DateTime.Now;
	            DesdefrDTP.MaxDate=DateTime.Now;
	            DesdefeDTP.MaxDate=DateTime.Now;
	            HastafsDTP.MaxDate=DateTime.Now;
	            HastafrDTP.MaxDate=DateTime.Now;
	            HastafeDTP.MaxDate=DateTime.Now;
	            this.MaximizeBox=false;
	            this.MinimizeBox=false;
	        	proveedor=cad;
	        	lstLineaPedCompra=lstped;
	        	gui=guiS;
	        	VerBTN.Visible=false;
	        	EliminarBTN.Visible=false;
	        	NuevoBTN.Visible=false;
	        	//EstadoCB.SelectedItem="<Seleccionar>";
	        	//EstadoCB.SelectedIndex=lstTipoProd.Count-1;
	            //EstadoCB.SelectedIndex=1;
	            
	        	CargarVentana();
	        	this.Text="Buscar Pedidos Compra";
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        private void CargarVentana(){
        	try{
	        	EliminarBTN.Enabled=false;
	        	VerBTN.Enabled=false;
	        	
	        	NuevoBTN.Enabled=false;
	        	
	        	for (int i=0;i<BLInfo.usuarioActual.Rol.Privilegio.Count;i++){
		                if ((new BLPrivilegio()).existePrivilegio(2,"COMP","PEDC",BLInfo.UsuarioActual.Rol.Privilegio)){
		                    EliminarBTN.Enabled=true;
				        	VerBTN.Enabled=true;
				        	
				        	NuevoBTN.Enabled=true;
		                }
	        			if ((new BLPrivilegio()).existePrivilegio(1,"COMP","PEDC",BLInfo.UsuarioActual.Rol.Privilegio)){
				        	NuevoBTN.Enabled=true;
				        	VerBTN.Enabled=true;
		                }
		            }
	        	
	        	CodigoTB.KeyPress+=new KeyPressEventHandler(Utils.SoloNumerosTB);
	        	EstadoCB.Items.AddRange(blPedidoCompra.getEstadosPedCompra().ToArray());
	        	EstadoCB.SelectedItem="TODOS";
	        	ListaPedidoCompraDGV.AllowUserToAddRows=false;
	        	DesdefsDTP.CustomFormat="yyyyMMdd";
	        	DesdefrDTP.CustomFormat="yyyyMMdd";
	        	DesdefeDTP.CustomFormat="yyyyMMdd";
	        	HastafeDTP.CustomFormat="yyyyMMdd";
	        	HastafrDTP.CustomFormat="yyyyMMdd";
	        	HastafsDTP.CustomFormat="yyyyMMdd";
	        	lstPedidoCompra=new List<BEPedidoCompra>();
	        	EstadoCB.SelectedIndex=5;
	        	
	        	/*
	        	DesdefeDTP.Enabled=false;
	        	DesdefrDTP.Enabled=false;
	        	DesdefsDTP.Enabled=false;
	        	HastafeDTP.Enabled=false;
	        	HastafrDTP.Enabled=false;
	        	HastafsDTP.Enabled=false;
	        	*/
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }

        private void NuevoBTN_Click(object sender, EventArgs e)
        {
        	
        	try{
        		
	            GUIPedidoCompra guiPC = new GUIPedidoCompra(1,1,this);
	            guiPC.ShowDialog(this);
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
    	}

        private void ModificarBTN_Click(object sender, EventArgs e)
        {
        	
	           
        	
        }

        
        public void Busqueda(){
        	try{
	        	String FecIniA = DesdefsDTP.Value.ToString("yyyyMMdd");
	        	String FecFinA = HastafsDTP.Value.ToString("yyyyMMdd");
	        	String FecIniB = DesdefrDTP.Value.ToString("yyyyMMdd");
	        	String FecFinB = HastafrDTP.Value.ToString("yyyyMMdd");
	        	String FecIniC = DesdefeDTP.Value.ToString("yyyyMMdd");
	        	String FecFinC = HastafeDTP.Value.ToString("yyyyMMdd");
	        	if (DesdefsCHB.Checked==false){FecIniA="";}
	        	if (HastafsCHB.Checked==false){FecFinA="";}
	        	if (DesdefrCHB.Checked==false){FecIniB="";}
	        	if (HastafrCHB.Checked==false){FecFinB="";}
	        	if (DesdefeCHB.Checked==false){FecIniC="";}
	        	if (HastafeCHB.Checked==false){FecFinC="";}
	        	String estado=EstadoCB.SelectedItem.ToString();
	        	int [] arrEstados=new int[1];
	        	if (estado.CompareTo("<Seleccionar>")==0){estado="TODOS";}
	        	arrEstados[0]=0;
	        	int id;
	        	if (CodigoTB.Text.CompareTo("")!=0){
	        		id=int.Parse(CodigoTB.Text);
	        	} else {id=0;}
	        	String fec="";
	        	ListaPedidoCompraDGV.Rows.Clear();
	        	lstPedidoCompra=new Business_Logic.BLPedidoCompra().BuscarPedidoCompra(id,estado,FecIniA,FecFinA,FecIniB,FecFinB,FecIniC,FecFinC);
	        	if (gui!=null){
	        		for (int i=0;i<lstPedidoCompra.Count;i++){
	        			if (lstPedidoCompra[i].strEstado.CompareTo("SOLICITADO")!=0){
	        				lstPedidoCompra.RemoveAt(i);
	        				i--;
	        			}
	        		}
	        	}
	            foreach (BEPedidoCompra PedCompra in lstPedidoCompra)
	            {
	            	String cadena="";
	            	String strfecAte="";
	            	String strfecSol="";
	            	if (PedCompra.fechaSolicitud.Length==8){
		            	cadena=PedCompra.fechaSolicitud;
		            	strfecSol=cadena.Substring(6,2)+"-"+cadena.Substring(4,2)+"-"+cadena.Substring(0,4);
	            	}
		            if (PedCompra.fechaAtencion.Length==8){
		            	cadena=PedCompra.fechaAtencion;
		            	strfecAte=cadena.Substring(6,2)+"-"+cadena.Substring(4,2)+"-"+cadena.Substring(0,4);
	            	}
		            ListaPedidoCompraDGV.Rows.Add(new object[] {false,PedCompra.Id,strfecSol,strfecAte,PedCompra.strEstado});
	            }
	            CantidadpcLBL.Text="Cantidad de Pedidos de Compra: "+ListaPedidoCompraDGV.Rows.Count;
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        void BuscarBTNClick(object sender, EventArgs e)
        {
        	Busqueda();
            
        }
        
        void DesdefsCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	if (DesdefsCHB.Checked==true){
	        		DesdefsDTP.Enabled=true;
	        	}
	        	else{
	        		DesdefsDTP.Enabled=false;
	        	}
        	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void HastafsCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	if (HastafsCHB.Checked==true){
	        		HastafsDTP.Enabled=true;
	        	}
	        	else{
	        		HastafsDTP.Enabled=false;
	        	}
        	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void DesdefrCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	if (DesdefrCHB.Checked==true){
	        		DesdefrDTP.Enabled=true;
	        	}
	        	else{
	        		DesdefrDTP.Enabled=false;
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void HastafrCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	if (HastafrCHB.Checked==true){
	        		HastafrDTP.Enabled=true;
	        	}
	        	else{
	        		HastafrDTP.Enabled=false;
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void DesdefeCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	if (DesdefeCHB.Checked==true){
	        		DesdefeDTP.Enabled=true;
	        	}
	        	else{
	        		DesdefeDTP.Enabled=false;
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void HastafeCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	if (HastafeCHB.Checked==true){
	        		HastafeDTP.Enabled=true;
	        	}
	        	else{
	        		HastafeDTP.Enabled=false;
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void EliminarBTNClick(object sender, EventArgs e)
        {
        	try{
	        	if (ListaPedidoCompraDGV.Rows.Count>0){
		        	int cont=0; int num=0; int opcion=0;
		        	for (int i=0;i<ListaPedidoCompraDGV.Rows.Count;i++){
		        		if ((bool)ListaPedidoCompraDGV[0,i].Value){
		        			cont=1;
		        		}
		        		else{
		        			cont=cont*1;
		        		}
		        	}
		        	if (cont==1){
		        		
		        		if (Utils.MessagePregunta("¿Deseas eliminar las ordenes de compra seleccionadas?")){
		        			for (int j=0;j<ListaPedidoCompraDGV.Rows.Count;j++){
		        				if ((bool)ListaPedidoCompraDGV[0,j].Value){
		        					int idcod=(int)ListaPedidoCompraDGV[1,j].Value;
		        					blPedidoCompra.EliminarPedidoCompra(idcod);
		        				}
		        			}
		        			Busqueda();
		        		}
		        		else{
		        			return;
		        		}
		        	}
		        	else{
		        		Utils.MessageAviso("Debe de seleccionar un Pedido de Compra");
		        	}
	        	}
	        	else{
	        		Utils.MessageAviso("Debe de Seleccionar un Pedido de Compra");
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void SeleccionTodosCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	bool valor=false;
	        	if (SeleccionTodosCHB.Checked){valor=true;}
	        	for (int i=0;i<ListaPedidoCompraDGV.Rows.Count;i++){
	        		ListaPedidoCompraDGV[0,i].Value=valor;
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void LimpiarBTNClick(object sender, EventArgs e)
        {
        	try{
	        	CodigoTB.Text="";
	        	DesdefsDTP.Enabled=false;
	        	DesdefeDTP.Enabled=false;
	        	DesdefrDTP.Enabled=false;
	        	HastafsDTP.Enabled=false;
	        	HastafrDTP.Enabled=false;
	        	HastafeDTP.Enabled=false;
	        	CantidadpcLBL.Text="Cantidad de Pedidos de Compra : 0";
	        	ListaPedidoCompraDGV.Rows.Clear();
	        	lstPedidoCompra.Clear();
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void VerBTNClick(object sender, EventArgs e)
        {
        	try{
	        	int cont=0; int elegido=0;
	        	for (int i=0;i<ListaPedidoCompraDGV.Rows.Count;i++){
	        		if ((bool)ListaPedidoCompraDGV[0,i].Value){
	        			cont++; elegido=(int)ListaPedidoCompraDGV[1,i].Value;
	        		}
	        	}
	        	if (cont==1){
	        	 GUIPedidoCompra guiPC = new GUIPedidoCompra(3,elegido,this);
		         guiPC.ShowDialog(this);
	        	}
	        	else{
	        		if (cont==0){
	        			Utils.MessageAviso("Debe de seleccionar al menos una fila");
	        		}
	        		else{
	        			Utils.MessageAviso("Debe de seleccionar solo una fila");
	        		}
	        		
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void Ver2BTNClick(object sender, EventArgs e)
        {
        	try{
	        	int cont=0; int seleccionado=0;
	        	for (int i=0;i<ListaPedidoCompraDGV.Rows.Count;i++){
	        		if ((bool)ListaPedidoCompraDGV[0,i].Value){
	        			cont++; seleccionado=i;
	        		}
	        		if (cont>1){
	        			Utils.MessageAviso("Debe de seleccionar solo una fila");
	        			break;
	        		}
	        	}
	        	if (cont==0){Utils.MessageAviso("Debe de Seleccionar una fila");}
	        	if (cont==1){
	        		
	        		int op=(int)ListaPedidoCompraDGV[1,seleccionado].Value;
	        		GUIListaLineaPedidoCompra guiLLPC=new GUIListaLineaPedidoCompra(op);
	        		guiLLPC.ShowDialog(this);
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void CargarBTNClick(object sender, EventArgs e)
        {
        	try{
	        	bool condicion=false;
	        	if (ListaPedidoCompraDGV.Rows.Count>0){
		        	for (int i=0;i<ListaPedidoCompraDGV.Rows.Count;i++){
		        		if ((bool)ListaPedidoCompraDGV[0,i].Value){
	        				condicion=true;
		        			lstAuxiliar.AddRange(blPedidoCompra.getLineaPedidosCompra((int)ListaPedidoCompraDGV[1,i].Value));
		        		}
							
		        	}
	        		if (condicion){
			        	if (lstAuxiliar.Count>0){
				        	for (int j=0;j<lstAuxiliar.Count;j++){
			        			
			        			if ((lstLineaPedCompra.Count==0) && (lstAuxiliar[j].Proveedor.RazonSocial.CompareTo(proveedor)==0)){
			        				BELineaOrdenCompra belinea=new BELineaOrdenCompra();
				        			belinea.ProductoProveedor.Producto.Codigo=lstAuxiliar[j].ProductoProveedor.Producto.Codigo;
				        			belinea.Cantidad=lstAuxiliar[j].CantidadSolicitada;
				        			belinea.PrecioTotal=belinea.Cantidad*belinea.PrecioUnitario;
				        			belinea.Estado='N';
				        			if (lstAuxiliar[j].Proveedor.RazonSocial!=null){
				        				belinea.ProductoProveedor.Proveedor.RazonSocial=lstAuxiliar[j].Proveedor.RazonSocial;
				        			}
				        			else{
				        				belinea.ProductoProveedor.Proveedor.RazonSocial="";
				        			}
				        			belinea.ProductoProveedor.Producto.Descripcion=lstAuxiliar[j].ProductoProveedor.Producto.Descripcion;
				        			belinea.ProductoProveedor.Producto.Nombre=lstAuxiliar[j].ProductoProveedor.Producto.Nombre;
				        			belinea.ProductoProveedor.Producto.TipoProducto.Descripcion=lstAuxiliar[j].ProductoProveedor.Producto.TipoProducto.Descripcion;
				        			lstLineaPedCompra.Add(belinea);
				        			lstAuxiliar.RemoveAt(j);
			        			}
			        			if (lstAuxiliar.Count==0){
			        				gui.CargarLineasOrdenCompra();
			        				break;
			        			}
				        		for (int i=0;i<lstLineaPedCompra.Count;i++){
			        				if (lstAuxiliar[j].Proveedor.RazonSocial.CompareTo(proveedor)==0){
				        				if ((lstAuxiliar[j].ProductoProveedor.Producto.Codigo==lstLineaPedCompra[i].ProductoProveedor.Producto.Codigo)){
					        				lstLineaPedCompra[i].Cantidad+=lstAuxiliar[j].CantidadRecepcionada;
					        				
					        				break;
					        			}
					        			else{
					        				if ((i+1)==lstLineaPedCompra.Count){
					        					BELineaOrdenCompra belinea=new BELineaOrdenCompra();
					        					belinea.ProductoProveedor.Producto.Codigo=lstAuxiliar[j].ProductoProveedor.Producto.Codigo;
					        					belinea.Cantidad=lstAuxiliar[j].CantidadRecepcionada;
					        					belinea.PrecioTotal=belinea.Cantidad*belinea.PrecioUnitario;
					        					belinea.Estado='N';
					        					if (lstAuxiliar[j].Proveedor.RazonSocial!=null){
					        						belinea.ProductoProveedor.Proveedor.RazonSocial=lstAuxiliar[j].Proveedor.RazonSocial;
					        					}
					        					else{
					        						belinea.ProductoProveedor.Proveedor.RazonSocial="";
					        					}
					        					belinea.ProductoProveedor.Producto.Descripcion=lstAuxiliar[j].ProductoProveedor.Producto.Descripcion;
					        					belinea.ProductoProveedor.Producto.Nombre=lstAuxiliar[j].ProductoProveedor.Producto.Nombre;
					        					belinea.ProductoProveedor.Producto.TipoProducto.Descripcion=lstAuxiliar[j].ProductoProveedor.Producto.TipoProducto.Descripcion;
					        					lstLineaPedCompra.Add(belinea);
					        					
					        				}
				        					
					        			}
			        				}
				        		}
				        	}
	        				gui.CargarLineasOrdenCompra();
	        				this.Dispose();
							this.Close();        		
							Utils.MessageAviso("Algunos productos no se cargaron ,ya que no estan relacionados al Proveedor Seleccionado");
			        	}
	        			else{
	        				this.Close();
	        				Utils.MessageAviso("No se ha encontrado ninguna coincidencia con el Proveedor especificado");
	        			}
	        			
		        		
	        		}
	        		else{
	        			Utils.MessageAviso("No se ha seleccionado ningun Pedido de Compra");
	        		}
		        	
	        	}
	        	else{
	        		Utils.MessageAviso("Debe de seleccionar al menos un pedido de compra");
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void ListaPedidoCompraDGVCellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
        	try{
	        	if (ListaPedidoCompraDGV.Rows.Count>0){
		        	int fila=ListaPedidoCompraDGV.CurrentRow.Index;
		        	if ((bool)ListaPedidoCompraDGV[0,fila].Value){
		        		ListaPedidoCompraDGV[0,fila].Value=false;
		        	}
		        	else{
		        		ListaPedidoCompraDGV[0,fila].Value=true;
		        	}
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
    }
}
